home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / GEM / AESWINDO.I < prev    next >
Encoding:
Modula Implementation  |  1994-01-11  |  8.9 KB  |  351 lines

  1. IMPLEMENTATION MODULE AESWindows;
  2. (*$L-, N+, Y+*)
  3.  
  4.  
  5. (*  Megamax Modula-2 GEM-Library :  Die AES Fensterfunktionen
  6.  *
  7.  *  Autor: Manuel Chakravarty           Erstellt :  05.11.87
  8.  *
  9.  *  Version   2.2     V#0029
  10.  *)
  11.  
  12. (*  05.11.87    | Übernahme von 'GEMBase' und 'GEMExt'
  13.  *  20.11.87    | Def. + Impl. von 'ResetWindows'
  14.  *  15.02.90    | Anpassung an Compilerversion 4.0
  15.  *  02.04.90    | Anpassung an public arrays
  16.  *  05.10.90    | Keine verdrehten SETs mehr
  17.  *)
  18.  
  19.  
  20. FROM    SYSTEM          IMPORT ASSEMBLER;
  21.  
  22. FROM    MOSGlobals      IMPORT MemArea;
  23.  
  24. FROM    GrafBase        IMPORT Point, Rectangle;
  25.  
  26. FROM    GEMGlobals      IMPORT PtrMaxStr, PtrObjTree;
  27.  
  28. IMPORT  GEMShare;
  29.  
  30. (*$I GEMOPS.ICL *)
  31.  
  32.  
  33. PROCEDURE CreateWindow(kind:WElementSet;max:Rectangle; VAR handle:CARDINAL);
  34.  
  35. BEGIN
  36.   ASSEMBLER
  37.         MOVE.L  -(A3),-(A7)
  38.         
  39.         MOVE.L  pubs,A0
  40.         LEA     pubArrays.aINTIN+$A(A0),A0
  41.         MOVE.L  -(A3),-(A0)
  42.         MOVE.L  -(A3),-(A0)
  43.         MOVE.W  -(A3), D0
  44.         ;ROR.L   #8, D0                  ; SET conversion
  45.         MOVE.W  D0,-(A0)
  46.         MOVE.W  #WIND_CREATE,(A3)+
  47.         JSR     aes_if
  48.         MOVE.L  pubs,A0
  49.         MOVE.L  our_cb, A1
  50.         MOVE.W  pubArrays.aINTOUT(A0),D0
  51.         
  52.         CMP.W   #NoWindow,D0
  53.         BEQ     noSuper                 ; falls supervision und korr. Wind.Hand.
  54.         MOVE.L  cb.SUPERVISION.createWinds(A1),D1
  55.         BSET    D0,D1                   ; speichere das handle in der Liste
  56.         MOVE.L  D1,cb.SUPERVISION.createWinds(A1)
  57. noSuper
  58.  
  59.         MOVE.L  (A7)+,A0
  60.         MOVE.W  D0,(A0)
  61.   END;
  62. END CreateWindow;
  63.  
  64. PROCEDURE OpenWindow(handle:CARDINAL;frame:Rectangle);
  65.  
  66. BEGIN
  67.   ASSEMBLER
  68.     MOVE.L      pubs,A0
  69.     MOVE.L      our_cb, A2
  70.     LEA         pubArrays.aINTIN+$A(A0),A1
  71.     MOVE.L      -(A3),-(A1)
  72.     MOVE.L      -(A3),-(A1)
  73.     MOVE.W      -(A3),D0
  74.     
  75.     MOVE.L      cb.SUPERVISION.openWinds(A2),D1
  76.     MOVE.L      D1,-(A7)                ; alte Liste auf den Stack
  77.     CMP.W       #31,D0
  78.     BHI         noSuper                 ; springe, falls 'handle' zu groß
  79.     BSET        D0,D1                   ; füge neues handle ein
  80.     MOVE.L      D1,cb.SUPERVISION.openWinds(A2)
  81. noSuper
  82.  
  83.     MOVE.W      D0,-(A1)
  84.     MOVE.W      #WIND_OPEN,(A3)+
  85.     JSR         aes_if
  86.     JSR         testINTOUT0
  87.     MOVE.L      our_cb,A0
  88.     
  89.     MOVE.L      (A7)+,D1                ; Hole alte Liste vom Stack
  90.     TST.W       error
  91.     BEQ         noSuper2                ; falls Fehler aufgetretten ist,...
  92.     MOVE.L      our_cb,A0               ; alte Liste -> aktuelle Liste
  93.     MOVE.L      D1,cb.SUPERVISION.openWinds(A0)
  94. noSuper2
  95.   END;
  96. END OpenWindow;
  97.  
  98. PROCEDURE CloseWindow(handle:CARDINAL);
  99.  
  100. BEGIN
  101.   ASSEMBLER
  102.         JMP     closeWindow
  103.   END;
  104. END CloseWindow;
  105.  
  106. PROCEDURE DeleteWindow(handle:CARDINAL);
  107.  
  108. BEGIN
  109.   ASSEMBLER
  110.         JMP     deleteWindow
  111.   END;
  112. END DeleteWindow;
  113.  
  114.   (* Aufteilung von 'wind_get' *)
  115.  
  116. PROCEDURE WindowSize(handle:CARDINAL;typ:WSizeMode):Rectangle;
  117.                    
  118. BEGIN
  119.   ASSEMBLER
  120.     MOVE.L      pubs,A1
  121.     LEA         pubArrays.aINTIN+$4(A1),A1
  122.     MOVE.W      -(A3),D0
  123.     ADDQ.W      #4,D0           ; passe Aufzähl.typ an wi_gfield an
  124.     MOVE.W      D0,-(A1)
  125.     MOVE.W      -(A3),-(A1)
  126.     MOVE.W      #WIND_GET,(A3)+
  127.     JSR         aes_if
  128.     JSR         testINTOUT0
  129.     MOVE.L      pubs,A0
  130.     LEA         pubArrays.aINTOUT+2(A0),A0
  131.     MOVE.L      (A0)+,(A3)+
  132.     MOVE.L      (A0)+,(A3)+
  133.   END;
  134. END WindowSize;
  135.                    
  136. PROCEDURE WindowSliderValue(handle:CARDINAL;typ:WSliderMode):INTEGER;
  137.                      
  138. BEGIN
  139.   ASSEMBLER
  140.     MOVE.L      pubs,A1
  141.     LEA         pubArrays.aINTIN+$4(A1),A1
  142.     MOVE.W      -(A3),D0
  143.     ADDQ.W      #8,D0           ; erste Korrektur für wi_gfield
  144.     CMP.W       #$A,D0
  145.     BLT         cont
  146.     ADDQ.W      #5,D0           ; und eventuell eine zweite
  147. cont
  148.     MOVE.W      D0,-(A1)
  149.     MOVE.W      -(A3),-(A1)
  150.     MOVE.W      #WIND_GET,(A3)+
  151.     JSR         aes_if
  152.     JSR         testINTOUT0
  153.     MOVE.L      pubs,A0
  154.     MOVE.W      pubArrays.aINTOUT+2(A0),(A3)+
  155.   END;
  156. END WindowSliderValue;
  157.                      
  158. PROCEDURE TopWindow():CARDINAL;
  159.  
  160. BEGIN
  161.   ASSEMBLER
  162.     MOVE.L      pubs,A0
  163.     MOVE.W      #$A,pubArrays.aINTIN+2(A0) ; wi_gField=10
  164.     MOVE.W      #WIND_GET,(A3)+
  165.     JSR         aes_if
  166.     JSR         testINTOUT0
  167.     MOVE.L      pubs,A0
  168.     MOVE.W      pubArrays.aINTOUT+2(A0),(A3)+
  169.   END;
  170. END TopWindow;
  171.  
  172. PROCEDURE WindowRectList(handle:CARDINAL;typ:RListMode):Rectangle;
  173.                        
  174. BEGIN
  175.   ASSEMBLER
  176.     ADDQ.W      #7,-2(A3) ; korrigiere Aufzähl.typ für wi_gfield
  177.     JSR         WindowSize
  178.   END;
  179. END WindowRectList;
  180.  
  181. PROCEDURE ScreenBuffer(handle:CARDINAL):MemArea;
  182.  
  183. BEGIN
  184.   ASSEMBLER
  185.     MOVE.L      pubs,A0
  186.     MOVE.W      -(A3),pubArrays.aINTIN(A0)
  187.     MOVE.W      #17,pubArrays.aINTIN+2(A0) ; wi_gField=17
  188.     MOVE.W      #WIND_GET,(A3)+
  189.     JSR         aes_if
  190.     JSR         testINTOUT0
  191.     MOVE.L      pubs,A0
  192.     MOVE.L      pubArrays.aINTOUT+2(A0),D0
  193.     MOVE.L      D0,(A3)+
  194.     MOVE.L      pubArrays.aINTOUT+6(A0),D0
  195.     MOVE.L      D0,(A3)+
  196.   END;
  197. END ScreenBuffer;
  198.  
  199.  
  200.   (* Aufteilung von 'wind_set' *)
  201.  
  202. PROCEDURE SetWindowString(handle:CARDINAL;typ:WStringMode;str:PtrMaxStr);
  203.  
  204. BEGIN
  205.   ASSEMBLER
  206.     MOVE.L      pubs,A0
  207.     LEA         pubArrays.aINTIN+8(A0),A0
  208.     MOVE.L      -(A3),-(A0)
  209.     MOVE.W      -(A3),D0
  210.     ADDQ.W      #2,D0           ; Aufzähl.typ auf wi_sfield korrigieren
  211.     MOVE.W      D0,-(A0)
  212.     MOVE.W      -(A3),-(A0)
  213.     MOVE.W      #WIND_SET,(A3)+
  214.     JSR         aes_if
  215.     JSR         testINTOUT0
  216.   END;
  217. END SetWindowString;
  218.  
  219. PROCEDURE SetWindowSize(handle:CARDINAL;frame:Rectangle);
  220.  
  221. BEGIN
  222.   ASSEMBLER
  223.     MOVE.L      pubs,A0
  224.     LEA         pubArrays.aINTIN+$C(A0),A0
  225.     MOVE.L      -(A3),-(A0)
  226.     MOVE.L      -(A3),-(A0)
  227.     MOVE.W      #5,-(A0)        ; wi_sfield = 5
  228.     MOVE.W      -(A3),-(A0)
  229.     MOVE.W      #WIND_SET,(A3)+
  230.     JSR         aes_if
  231.     JSR         testINTOUT0
  232.   END;
  233. END SetWindowSize;
  234.  
  235. PROCEDURE SetWindowSlider(handle:CARDINAL;typ:WSliderMode;value:INTEGER);
  236.                      
  237. BEGIN
  238.   ASSEMBLER
  239.     MOVE.L      pubs,A1
  240.     LEA         pubArrays.aINTIN+$6(A1),A1
  241.     MOVE.W      -(A3),-(A1)
  242.     MOVE.W      -(A3),D0
  243.     ADDQ.W      #8,D0           ; erste Korrektur für wi_gfield
  244.     CMP.W       #$A,D0
  245.     BLT         cont
  246.     ADDQ.W      #5,D0           ; und eventuell eine zweite
  247. cont
  248.     MOVE.W      D0,-(A1)
  249.     MOVE.W      -(A3),-(A1)
  250.     MOVE.W      #WIND_SET,(A3)+
  251.     JSR         aes_if
  252.     JSR         testINTOUT0
  253.   END;
  254. END SetWindowSlider;
  255.  
  256. PROCEDURE SetTopWindow(handle:CARDINAL);
  257.  
  258. BEGIN
  259.   ASSEMBLER
  260.     MOVE.L      pubs,A0
  261.     LEA         pubArrays.aINTIN+4(A0),A0
  262.     MOVE.W      #$A,-(A0)               ; wi_gField = 10
  263.     MOVE.W      -(A3),-(A0)
  264.     MOVE.W      #WIND_SET,(A3)+
  265.     JSR         aes_if
  266.     JSR         testINTOUT0
  267.   END;
  268. END SetTopWindow;
  269.  
  270. PROCEDURE SetNewDesk(objaddr:PtrObjTree;first:CARDINAL);
  271.  
  272. BEGIN
  273.   ASSEMBLER
  274.     MOVE.L      pubs,A0
  275.     LEA         pubArrays.aINTIN+$A(A0),A0
  276.     MOVE.W      -(A3),-(A0)
  277.     MOVE.L      -(A3),-(A0)
  278.     MOVE.W      #$E,-(A0)        ; wi_sfield = 14
  279.     MOVE.W      #WIND_SET,(A3)+
  280.     JSR         aes_if
  281.     JSR         testINTOUT0
  282.   END;
  283. END SetNewDesk;
  284.  
  285. PROCEDURE FindWindow (mouseLoc:Point) :CARDINAL;
  286.  
  287. BEGIN
  288.   ASSEMBLER
  289.         MOVE.L  pubs,A0
  290.         MOVE.L  -(A3),pubArrays.aINTIN(A0)
  291.         MOVE.W  #WIND_FIND,(A3)+
  292.         JSR     aes_if
  293.         MOVE.L  pubs,A0
  294.         MOVE.W  pubArrays.aINTOUT(A0),(A3)+
  295.   END;
  296. END FindWindow;
  297.  
  298. PROCEDURE MouseControl(user:BOOLEAN);
  299.  
  300. BEGIN
  301.   ASSEMBLER
  302.     ADDQ.W      #2,-2(A3)    ; correct wi_ubegend
  303.     JMP         updateWindow    ; Eigentliche Routine anspringen
  304.   END;
  305. END MouseControl;
  306.  
  307. PROCEDURE UpdateWindow(update:BOOLEAN);
  308.  
  309. BEGIN
  310.   ASSEMBLER
  311.     JMP         updateWindow            ; Rufe eigentliche Routine auf
  312.   END;
  313. END UpdateWindow;
  314.  
  315. PROCEDURE CalcWindow(typ:WCalcMode;kind:WElementSet;in:Rectangle):Rectangle;
  316.  
  317.   BEGIN
  318.     ASSEMBLER
  319.         MOVE.L  pubs,A0
  320.         LEA     pubArrays.aINTIN+$C(A0),A0
  321.         MOVE.L  -(A3),-(A0)
  322.         MOVE.L  -(A3),-(A0)
  323.         MOVE.W  -(A3), -(A0)
  324.         MOVE.W  -(A3),-(A0)
  325.         MOVE.W  #WIND_CALC,(A3)+
  326.         JSR     aes_if
  327.         MOVE.L  pubs,A0
  328.         LEA     pubArrays.aINTOUT+$2(A0),A0
  329.         MOVE.L  (A0)+,(A3)+
  330.         MOVE.L  (A0)+,(A3)+
  331.         JMP     testINTOUT0
  332.     END;
  333.   END CalcWindow;
  334.  
  335. PROCEDURE ResetWindows ();
  336.  
  337.   BEGIN
  338.     ASSEMBLER
  339.         MOVE.L  our_cb, A0
  340.         CLR.W   cb.SUPERVISION.noMouseCtrl(A0)
  341.         CLR.W   cb.SUPERVISION.noUpWind(A0)
  342.         CLR.L   cb.SUPERVISION.createWinds(A0)
  343.         CLR.L   cb.SUPERVISION.openWinds(A0)
  344.         MOVE.W  #WIND_NEW, (A3)+
  345.         JMP     aes_if
  346.     END;
  347.   END ResetWindows;
  348.   
  349.  
  350. END AESWindows.
  351.